/**
 *	@file	pgtel_list.h
 *	@brief	ポケギア　電話帳リスト管理
 *	@author	Miyuki Iwasawa
 *	@date	07.10.24
 */

#ifndef __H_PGTEL_LIST_H__
#define __H_PGTEL_LIST_H__

#include "pm_tel.h"

typedef struct _PGTEL_NUMBER_LIST	PGTEL_NUMBER_LIST;

///<電話帳並び順リスト
struct _PGTEL_NUMBER_LIST{
 u8 id;
 PMTEL_NUMBER	number;

 PGTEL_NUMBER_LIST* prev;
 PGTEL_NUMBER_LIST* next;
};

///<電話帳リスト表示制御用データ構造体
typedef struct{
 u8 id;	///<並び
 PGTEL_NUMBER_LIST* pl;	///<オリジナルリストへのポインタ
 PMTEL_NUMBER	number;
}PGTEL_LIST_TAG;

typedef struct{
 u8	f1_col;	///<フォントメインカラー
 u8 b1_col;	///<ベースカラー
 u8	s1_col;	///<フォントシャドウカラー
 u8	r1_col;	///<選択時メインカラー
 u8 rs1_col;	///選択時シャドウカラー
 u8	f2_col;	///<フォントメインカラー
 u8 b2_col;	///<ベースカラー
 u8	s2_col;	///<フォントシャドウカラー
 u8	r2_col;	///<選択時メインカラー
 u8 rs2_col;	///選択時シャドウカラー
 u8	l1_col;	///<ラインカラー
 u8	l2_col;	///<ラインカラー
 GF_PRINTCOLOR set1,set2,rset1,rset2;
}PGTEL_LIST_COL;

///<電話帳リスト表示制御
typedef struct{
 u8	count;	///<制御数
 u8	pos;	///<カレントポジション
 u8	target;	///<カレントポジション
 u8	top;
 u8	bottom;
 u8	vnum;	///<見えている要素数

 u8	line_pat:1;	///<ライン描画パターン
 u8	mode:7;	///<制御モード

 u8	scr_f:1;	///<スクロールフラグ
 u8	scr_dir:1;	///<スクロール方向
 u8	scr_kind:1;	///<スクロールの種類
 u8	scr_ct:5;	///<スクロールカウンタ

 u8	scr_seq:4;
 u8	scr_line:3;
 u8	scr_end:1;
 PGTEL_LIST_TAG	tag[PMTEL_NUMBER_MAX];

 GF_BGL_BMPWIN*	win;
 PGTEL_LIST_COL	col[2];
 CLACT_WORK_PTR	pActA[2];
 CLACT_WORK_PTR	pActS[LIST_VIEW_MAX];
 CLACT_WORK_PTR	pActC[4];

 PMTEL_DATA_MAN*	pSys;
 int *key_mode;	///<キーモード切替フラグ変数へのポインタ
 u8	*input_f;	///<入力モード切替フックフラグへのポインタ
}PGTEL_LIST_VIEW;

/**
 *	@brief	初期リストを作成
 */
extern void PGTelList_InitList(PGTEL_SYS_WORK* wk);

/**
 *	@brief	リストの並びをセーブデータに反映してメモリ解放
 */
extern void PGTelList_ReleaseList(PGTEL_SYS_WORK* wk);

/**
 *	@brief	リストの並べ替え
 *
 *	@param	tp	挿入ターゲット
 *	@param	no	挿入位置
 */
extern void PGTelList_Insert(PGTEL_SYS_WORK* wk,PGTEL_NUMBER_LIST* tp,u8 no);

/**
 *	@brief	リストのオートソート
 */
extern void PGTelVList_AutoSort(PGTEL_SYS_WORK* wk,u8 mode);

/**
 *	@brief	Viewリスト構造体の初期化
 */
extern void PGTelVList_Init(PGTEL_SYS_WORK* wk);

/**
 *	@brief	Viewリスト　描画リスト生成
 */
extern void PGTelVList_VListMake(PGTEL_SYS_WORK* wk);

/**
 *	@brief	Viewリスト　制御スタート
 */
extern void PGTelVList_Start(PGTEL_SYS_WORK* wk,PGTEL_LIST_VIEW* pv,u8 vtop,u8 vpos);

/*
 *	@brief	項目選択カーソルの描画制御
 *
 *	@param	pos カーソルを表示するポジション
 *	@param	draw_f	描画フラグ
 */
extern void PGTelVList_CursorSet(PGTEL_LIST_VIEW* pv,u8 pos,BOOL draw_f);

/*
 *	@brief	項目選択カーソルのアニメ制御
 *
 *	@param	anm_on	アニメ有効/無効
 */
extern void PGTelVList_CursorAnimeSet(PGTEL_LIST_VIEW* pv,BOOL anm_on);


/**
 *	@brief	リストの並べ替えカーソルの描画制御
 */
extern void PGTelVList_SortCursorSet(PGTEL_LIST_VIEW* pv,u8 pos,BOOL draw_f);

/**
 *	@brief	制御モード切替
 */
extern void PGTelVList_ModeChange(PGTEL_LIST_VIEW* pv,u8 mode);

/**
 *	@brief	項目選択カーソルの制御
 */
extern int PGTelVList_KeyIn(PGTEL_LIST_VIEW* pv);
extern int PGTelVList_KeyInSort(PGTEL_LIST_VIEW* pv);

/**
 *	@brief	項目選択カーソルの制御
 */
extern int PGTelVList_TouchIn(PGTEL_LIST_VIEW* pv);
extern int PGTelVList_TouchInSort(PGTEL_LIST_VIEW* pv,BOOL* touch_f);

/**
 *	@brief	選択したラインポジションを返す
 */
extern u8 PGTelVList_GetCurrentPos(PGTEL_LIST_VIEW* pv);

/**
 *	@brief	カレントポジションセット
 */
extern void PGTelVList_SetCurrentPos(PGTEL_LIST_VIEW* pv,u8 pos);

/**
 *	@brief	カレントラインをノーマル色で書き換える
 */
extern void PGTelVList_LineRewriteNormal(PGTEL_LIST_VIEW* pv);

#endif	//__H_PGTEL_LIST_H__
